/**
 * 智能分析基类
 * 提供数据查询、结果标准化和AI接口预留
 */

class BaseAnalyzer {
    constructor(caseId, targetSubject = null) {
        this.caseId = caseId;
        this.targetSubject = targetSubject; // 目标分析对象
        this.config = {
            llmEndpoint: null  // 预留大模型接口
        };
    }

    /**
     * 设置分析目标对象
     * @param {Object} subject 目标对象
     */
    setTarget(subject) {
        this.targetSubject = subject;
    }

    /**
     * 生成银行账号过滤的IN子句
     * @returns {string} SQL IN子句或空字符串
     */
    getBankAccountFilter() {
        if (!this.targetSubject || !this.targetSubject.accounts.bank.length) {
            return '';
        }
        const accounts = this.targetSubject.accounts.bank.map(acc => `'${acc}'`).join(',');
        return `AND account_card IN (${accounts})`;
    }

    /**
     * 生成手机号过滤的IN子句
     * @returns {string} SQL IN子句或空字符串
     */
    getPhoneFilter() {
        if (!this.targetSubject || !this.targetSubject.accounts.phone.length) {
            return '';
        }
        const phones = this.targetSubject.accounts.phone.map(p => `'${p}'`).join(',');
        return `AND user_number IN (${phones})`;
    }

    /**
     * 执行SQL查询
     * @param {string} sql SQL查询语句
     * @param {Array} params 参数数组
     * @returns {Promise<Object>} {success, data, message}
     */
    async runQuery(sql, params = []) {
        try {
            const result = await window.electronAPI.data.query({
                caseId: this.caseId,
                sql: sql,
                params: params
            });
            if (!result.success) {
                console.error('查询失败:', result.message);
                return { success: false, data: [], message: result.message };
            }
            return { success: true, data: result.data || [], message: '' };
        } catch (error) {
            console.error('查询异常:', error);
            return { success: false, data: [], message: error.message };
        }
    }

    /**
     * 格式化日期字符串
     * @param {string} dateStr 日期字符串
     * @returns {string} 格式化后的日期
     */
    formatDate(dateStr) {
        if (!dateStr) return '';
        const date = new Date(dateStr);
        if (isNaN(date.getTime())) return dateStr;

        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const hour = String(date.getHours()).padStart(2, '0');
        const minute = String(date.getMinutes()).padStart(2, '0');

        return `${year}-${month}-${day} ${hour}:${minute}`;
    }

    /**
     * 格式化金额
     * @param {number} amount 金额
     * @returns {string} 格式化后的金额
     */
    formatAmount(amount) {
        if (amount === null || amount === undefined) return '0.00';
        return Number(amount).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
    }

    /**
     * 生成基于模板的报告
     * @param {Array} results 分析结果
     * @param {string} analysisType 分析类型
     * @returns {string} 报告文本
     */
    generateTemplateReport(results, analysisType) {
        const templates = {
            'fast_pass': `检测到 ${results.length} 笔符合"快进快出"模式的可疑交易`,
            'smurfing': `检测到 ${results.length} 组符合"蚂蚁搬家"模式的可疑交易`,
            'loop': `检测到 ${results.length} 个资金回流闭环`,
            'off_hour': `检测到 ${results.length} 笔深夜异常交易`,
            'special_amount': `检测到 ${results.length} 笔特殊金额交易`,
            'dormant': `检测到 ${results.length} 个休眠账户激活`,
            'intimacy': `检测到 ${results.length} 个特殊时段高频通联关系`,
            'single_contact': `检测到 ${results.length} 个单线联系人`,
            'event_corr': `检测到 ${results.length} 个关键事件伴随通联`,
            'hidden_property': `检测到 ${results.length} 处疑似隐形房产`,
            'co_travel': `检测到 ${results.length} 次同行同住记录`,
            'shadow_asset': `检测到 ${results.length} 项隐形资产`
        };

        return templates[analysisType] || `检测到 ${results.length} 条异常记录`;
    }

    /**
     * 预留的大模型接口
     * @param {string} prompt 提示词
     * @param {Object} contextData 上下文数据
     * @returns {Promise<string|null>} AI生成的报告或null
     */
    async askLLM(prompt, contextData) {
        // 检查是否配置了本地大模型端点
        if (!this.config.llmEndpoint) {
            return null;
        }

        try {
            const response = await fetch(this.config.llmEndpoint, {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    prompt: `你是一个纪委案件分析专家，根据以下数据:\n${JSON.stringify(contextData, null, 2)}\n${prompt}`,
                    max_tokens: 1000
                })
            });

            if (!response.ok) {
                console.error('大模型请求失败:', response.statusText);
                return null;
            }

            const result = await response.json();
            return result.text || result.response || null;
        } catch (error) {
            console.error('大模型接口调用异常:', error);
            return null;
        }
    }

    /**
     * 创建标准化的分析结果对象
     * @param {string} type 分析类型
     * @param {string} title 标题
     * @param {Array} data 数据
     * @param {string} summary 摘要
     * @param {string} level 严重等级: info, warning, danger
     * @returns {Object} 标准化结果对象
     */
    createResult(type, title, data, summary, level = 'info') {
        return {
            type,
            title,
            count: data.length,
            data,
            summary,
            level,
            timestamp: new Date().toISOString()
        };
    }
}

// 暴露到全局
window.BaseAnalyzer = BaseAnalyzer;
console.log('BaseAnalyzer loaded');
